import axios from 'axios'
import axiosUtil from "@/services/axiosUtil"
import roleAPI from "@/services/role/RoleAPI"

// 创建 axios 的实例
let axiosInst = axios.create({
    baseURL: '/auth-local',
    timeout: 3000
})

axiosUtil.configInterceptors(axiosInst)

// 对 role api 进行 axios 封装
// 建立 key 到 value 的映射
// key -> roleAPI.key
// value -> method, url
let req = {}
for (const k in roleAPI) {
    let api = roleAPI[k]
    /*
        params, // 请求参数 get、delete：url；put、post、patch：data
        pathParams = [] // 路径 url
        isFormData = false, // 标记是否为 form data 数据
        config = {} // 配置参数
     */
    req[k] = async function (params, pathParams = [], isFormData = false, config = {}) {
        let newParams
        let url = api.url
        // content-type 是否是 form data 的判断
        if (params && isFormData) {
            newParams = new FormData()
            for (let p in params)
                newParams.append(p, params[p])
        } else {
            newParams = params
        }

        // 将路径参数加到 url path
        if (pathParams && pathParams.length > 0) {
            for (let i = 0; i < pathParams.length; i++)
                url += ('/' + pathParams[i])
        }

        let response = {}
        // 不用请求方法的枚举
        let method = api.method.toLowerCase()
        switch (method) {
            case 'get' :
            case 'delete' :
                config.params = newParams
                try {
                    // axios 里定义的 method 都是小写的
                    response = await axiosInst[method](url, config)
                } catch (err) {
                    response = err
                }
                break
            case 'post' :
            case 'put' :
            case 'patch' :
                try {
                    response = await axiosInst[method](url, newParams, config)
                } catch (err) {
                    response = err
                }
                break
            default:
        }
        return response
    }
}

export default req

/*let loading

// 开启加载动画
function startLoading() {
    loading = ElLoading.service({
        lock: true,
        text: '正在请求后台 ...',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
    })
}
// 关闭加载动画
function endLoading() {
    loading.close()
}

// 请求拦截器
axiosInst.interceptors.request.use(config => {
    // 发起请求前进行拦截, 可以添加token等
    startLoading()
    return config
}, () => {
    endLoading()
    ElMessage({type: 'error', message: '请求拦截器：请求错误！', duration: 1500})
})

// 响应拦截器
axiosInst.interceptors.response.use(res => {
    // 后台成功响应
    endLoading()
    return res.data
}, () => {
    // 后台响应错误，应该是后台未处理的异常信息
    endLoading()
    ElMessage({
        type: 'error',
        message: '响应拦截器：<b>服务器错误，请联系管理员后重试！</b>',
        dangerouslyUseHTMLString: true,
        duration: 2000
    })
})*/

